/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CapaDatos;

import java.sql.ResultSet;
import java.util.LinkedList;
/**
 *
 * @author JRN
 */
public class Rating_DAO implements DAO{

     private String sentenciaSQL;
    ConexionDB conexion;
    LinkedList<Rating_POJO> listaDetalle = new LinkedList<Rating_POJO>();
    ResultSet resultado;

    public Rating_DAO() {

        conexion = new ConexionDB();
    }

     //Estructura Rating
                    //idRating int PRIMARY KEY,
                    //estrellas int,
                    //idUsuario int REFERENCES Usuario (idUsuario), a quien le dieron punteo
                    //rating int REFERENCES Usuario (idUsuario)     quien dio el punteo

    public LinkedList<Rating_POJO> obtenerReg(int pIdRating) {
    conexion.abrirConexion();
        sentenciaSQL = "SELECT * FROM Rating WHERE idRating=" + pIdRating;

        try {
            resultado = conexion.getResultSet(sentenciaSQL);

            if (resultado.next()) {
                Rating_POJO objRating = new Rating_POJO();

                objRating.setRating(Integer.parseInt(resultado.getString("idRating")));
                objRating.setEstrellas(Integer.parseInt(resultado.getString("estrellas")));
                objRating.setIdUsuario(Integer.parseInt(resultado.getString("idUsuario")));
                objRating.setRating(Integer.parseInt(resultado.getString("rating")));


                listaDetalle.add(objRating);
             

            }

        } catch (Exception ex) {
            System.out.println("error " + ex);
            conexion.cerrarConexion();
            return null;
        }
        conexion.cerrarConexion();
        return listaDetalle;
    }



    public int guardarReg(int estrellas, int idUsuario, int rating) {

        conexion.abrirConexion();
        sentenciaSQL = "INSERT INTO Rating(estrellas,idUsuario,rating) VALUES ("
                + estrellas + "," + idUsuario + "," + rating + ")";

        try {
            int ret = conexion.executeQuery(sentenciaSQL);
            conexion.cerrarConexion();
            return ret;
        

        } catch (Exception ex) {
            System.out.println("error " + ex);
            conexion.cerrarConexion();
            return -1;
        }

    }



    public int actualizarReg(int idRating, int estrellas, int idUsuario, int rating) {
    conexion.abrirConexion();
        sentenciaSQL = "UPDATE Rating SET estrellas = " + estrellas +
                        ",idUsuario = "+ idUsuario +
                        ",rating =" + rating +
                       " WHERE idRating = " + idRating;


        try {
            int ret = conexion.executeQuery(sentenciaSQL);
          conexion.cerrarConexion();
            return ret;

        } catch (Exception ex) {
            System.out.println("error " + ex);
            conexion.cerrarConexion();
            return -1;
        }
    }


     public int eliminarReg (int id){
     conexion.abrirConexion();
        sentenciaSQL = "DELETE FROM Rating WHERE idRating="+id;

        try {
            int ret = conexion.executeQuery(sentenciaSQL);
            conexion.cerrarConexion();
            return ret;

        } catch (Exception ex) {
            System.out.println("error " + ex);
            conexion.cerrarConexion();
            return -1;
        }

    }


     /**
      * Metodo para obtener el Top 5 de usuarios con mas rating
      * @return retorna un ResultSet con los campos nombre,rating
      */
     public ResultSet getTopRating(){

         conexion.abrirConexion();

         sentenciaSQL = "SELECT u.nombre, sum(r.estrellas) AS  rating"+
                            " from Usuario u, Rating  r"+
                            " WHERE u.idUsuario = r.Usuario_idUsuario"+
                            " group by u.nombre"+
                            " order by rating Desc"+
                            " Limit 5";

        try {
            resultado = conexion.getResultSet(sentenciaSQL);


        } catch (Exception ex) {
            System.out.println("error " + ex);
            conexion.cerrarConexion();
            return null;
        }
        conexion.cerrarConexion();
        return resultado;

     }

}
